package com.leapp.sk.util.wxentry

import android.app.Activity
import android.os.Bundle
import com.leapp.sk.inter.BaseUIListener
import com.example.util.APP_ID_QQ
import com.leapp.sk.R
import com.tencent.tauth.Tencent
import com.tencent.connect.share.QQShare
import android.graphics.Bitmap
import com.example.util.APP_ID_WX
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject
import com.tencent.mm.opensdk.openapi.IWXAPI
import com.tencent.mm.opensdk.openapi.WXAPIFactory


/**
 * 分享工具类
 * @author  chaohaipeng  on 2018/8/4.
 */
class ShareUtil {
    /**
     * 分享监听
     */
    private var listener: BaseUIListener? = null

    /**
     * activity
     */
    private var mActivity: Activity? = null

    /**
     *   QQ
     */
    private var mTencent: Tencent? = null

    /**
     *  WX
     */
    private var api: IWXAPI? = null
    private val mTargetScene = SendMessageToWX.Req.WXSceneSession
    private val requestCode = 100
    private object mHolder {
        val instance = ShareUtil()
    }
    companion object {
        fun getInstance(): ShareUtil {
            return mHolder.instance
        }
    }
    /**
     * 初始化QQ登录
     */
    fun initQQ(activity: Activity) {
        mActivity=activity
        // Tencent类是SDK的主要实现类，开发者可通过Tencent类访问腾讯开放的OpenAPI。
        // 其中APP_ID是分配给第三方应用的appid，类型为String。
        mTencent = Tencent.createInstance(APP_ID_QQ, activity)
        // 1.4版本:此处需新增参数，传入应用程序的全局context，可通过activity的getApplicationContext方法获取
        // 初始化视图
        listener = BaseUIListener(activity)
    }

    /**
     * 官方参考文档地址：http://wiki.open.qq.com/index.php?title=Android_API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E&=45038#1.13_.E5.88.86.E4.BA.AB.E6.B6.88.E6.81.AF.E5.88.B0QQ.EF.BC.88.E6.97.A0.E9.9C.80QQ.E7.99.BB.E5.BD.95.EF.BC.89
     *
     * @param title       分享的内容title
     * @param openUrl     点击分享内容打开的地址
     * @param description 分享item的描述信息 分享的消息摘要，最长40个字。
     * @param imgUrl      分享item的图片地址
     * @param shareType   1分享到QQ空间 2分享到QQ好友
     */
    fun shareToQQ(title: String, description: String, openUrl: String, imgUrl: String, shareType: Int) {
        val params = Bundle()
        params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT)//消息类型 图文用默认的
        params.putString(QQShare.SHARE_TO_QQ_TITLE, title)//标题
        params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description)//描述信息
        params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, openUrl)//这条分享消息被好友点击后的跳转URL。
        params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imgUrl)//分享图片的URL或者本地路径
        params.putString(QQShare.SHARE_TO_QQ_APP_NAME, mActivity?.resources?.getString(R.string.app_name))
        params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, shareType)//分享额外选项，两种类型可选（默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框）：QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN，分享时自动打开分享到QZone的对话框。QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE，分享时隐藏分享到QZone按钮
        mTencent?.shareToQQ(mActivity, params, listener)
    }

    /**
     * 实例化微信
     */
    private fun initWx() {
        api = WXAPIFactory.createWXAPI(mActivity, APP_ID_WX, true)
        // 将该app注册到微信
        api?.registerApp(APP_ID_WX)
    }

    /**
     * @param title       分享的标题
     * @param openUrl     点击分享item打开的网页地址url
     * @param description 网页的描述
     * @param icon        分享item的图片
     * @param requestCode 0表示为分享到微信好友  1表示为分享到朋友圈 2表示微信收藏发送到聊天界面——WXSceneSession
    发送到朋友圈——WXSceneTimeline
     */
    fun sendToWeiXin(title: String, openUrl: String, description: String, icon: Bitmap, requestCode: Int) {
        //初始化一个WXWebpageObject对象，填写url
        val webpage = WXWebpageObject()
        webpage.webpageUrl = openUrl
        //Y用WXWebpageObject对象初始化一个WXMediaMessage对象，填写标题、描述
        val msg = WXMediaMessage(webpage)
        msg.title = title//网页标题
        msg.description = description//网页描述
        msg.setThumbImage(icon)
        //构建一个Req
        val req = SendMessageToWX.Req()
        req.transaction = "supplier"
        req.message = msg
        req.scene = requestCode
        api?.sendReq(req)
    }
}